package IC.AST;

public interface PropagatingVisitor<D,U> {
	
	public U visit(Program program, D d) throws Exception;
	public U visit(ICClass icClass, D d) throws Exception;
	public U visit(Field field, D d) throws Exception;
	public U visit(VirtualMethod method, D d) throws Exception;
	public U visit(StaticMethod method, D d) throws Exception;
	public U visit(LibraryMethod method, D d) throws Exception;
	public U visit(Formal formal, D d) throws Exception;
	public U visit(PrimitiveType type, D d) throws Exception;
	public U visit(UserType type, D d) throws Exception;
	public U visit(Assignment assignment, D d) throws Exception;
	public U visit(CallStatement callStatement, D d) throws Exception;
	public U visit(Return returnStatement, D d) throws Exception;
	public U visit(If ifStatement, D d) throws Exception;
	public U visit(While whileStatement, D d) throws Exception;
	public U visit(Break breakStatement, D d) throws Exception;
	public U visit(Continue continueStatement, D d) throws Exception;
	public U visit(StatementsBlock statementsBlock, D d) throws Exception;
	public U visit(LocalVariable localVariable, D d) throws Exception;
	public U visit(VariableLocation location, D d) throws Exception;
	public U visit(ArrayLocation location, D d) throws Exception;
	public U visit(StaticCall call, D d) throws Exception;
	public U visit(VirtualCall call, D d) throws Exception;
	public U visit(This thisExpression, D d) throws Exception;
	public U visit(NewClass newClass, D d) throws Exception;
	public U visit(NewArray newArray, D d) throws Exception;
	public U visit(Length length, D d) throws Exception;
	public U visit(MathBinaryOp binaryOp, D d) throws Exception;
	public U visit(LogicalBinaryOp binaryOp, D d) throws Exception;
	public U visit(MathUnaryOp unaryOp, D d) throws Exception;
	public U visit(LogicalUnaryOp unaryOp, D d) throws Exception;
	public U visit(Literal literal, D d) throws Exception;
	public U visit(ExpressionBlock expressionBlock, D d) throws Exception;
	
}